package com.itxiuyixiu.entity.enums;

/**
 * @author 黄磊
 * @date 2020/5/2
 */
public enum AccountState {
    /**
     * 审核中
     */
    AUDITING(0),
    /**
     * 审核未通过
     */
    FAILED(1),
    /**
     * 老师审核通过
     */
    TEACHER_PASSED(2),
    /**
     * 管理员审核通过
     */
    ADMIN_PASSED(3),
    /**
     * 审核通过
     */
    PASSED(4);

    private final Integer value;

    AccountState(Integer value) {
        this.value = value;
    }

    /**
     * 比较两个状态的大小
     *
     * @param state 大小
     * @return 假如 本状态 小于 state状态 的话就会返回一个负数，大于的就会返回一个整数，相等为0
     */
    public Integer compare(AccountState state) {
        return this.value - state.getValue();
    }

    /**
     * 比较两个状态的大小
     *
     * @param state1 状态1
     * @param state2 状态2
     * @return 假如 本状态 小于 state状态 的话就会返回一个负数，大于的就会返回一个整数，相等为0
     */
    public static Integer compare(AccountState state1, AccountState state2) {
        return state1.getValue() - state2.getValue();
    }

    /**
     * 返回当前value下一个值的对象
     *
     * @return 返回当前value下一个值的AccountState对象
     */
    public AccountState getNext() {
        int value = this.value + 1;
        return getByValue(value);
    }

    /**
     * 根据value的值返回相应的AccountState
     *
     * @param value 输入的值
     * @return value对应的AccountState对象
     */
    public static AccountState getByValue(int value) {
        AccountState[] accountStates = AccountState.values();
        for (AccountState state : accountStates) {
            if (state.getValue() == value) {
                return state;
            }
        }
        if (value > accountStates[accountStates.length - 1].getValue()) {
            return accountStates[accountStates.length - 1];
        }
        return null;
    }

    public Integer getValue() {
        return value;
    }
}
